<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class AdminModuleRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
//如果 authorize 方法返回 false，那么会响应一个 403 的状态码，并且控制器的方法不会被执行。
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
//        获取当前路由参数module的值,并赋值给变量$module
        $module = \Route::current()->parameter('module');
//        dd(\Route::current());
        return [
            //对传递过来的domain域名参数进行合法性验证,可以为空,如果为空后面就不再校验直接通过验证,
            //但是如果前面不为空就会依次校验后面的条件,必须是一个合法的url,必须在admin_modules表的domain列unique唯一
            //但是这样还有个问题当我单击修改域名但实际并没有做任何修改的时候提交unique判断还是不过,因为这个时候系统会用request
            //请求的domain域名在定义的admin_modules表中查找发现已经有一条了,所以会提示不能插入插入相同的数据,这个时候传递第三个参数就表示如果当前request请求的id和要修改的id相等的话这个时候其实这个值还是唯一的,仍然满足唯一性约束可以修改.
            //这里涉及到request请求唯一性判断的时候的一个思维漏洞,判断是先拿request请求中domain的值,然后在相应表中的domain字段中查看是否有和request请求中相等的值,如果有就不满足唯一性约束,没有就满足.但这有个漏洞就是当有时但是我恰巧就是要修改那个值并且改得和之前一样,这个时候request中的值同样是唯一的
            'domain'=>'nullable|url|unique:admin_modules,domain,'.$module['id'],
        ];
    }

    public function messages()
    {
        return [
            'domain.url'=>'请填写合法的网址',
        ];
    }
}
